Locale 对象描述了特定的地理、政治和文化地区。需要 Locale来执行其任务的操作称为本地化操作,它使用 Locale为用户量身定制信息。例如,显示一个数值就是本地化操作,应该根据用户本国家、地区或文化的风俗/传统来格式化该数值。
一个Locale对象由language code和country code组成。比如,en_US是美国英语的代码,而en_GB是英国英语的代码。
每个资源束根据规则,以messages名字开始和locale结束。Grails在grails-app/i18n下
发布了一串不同语言范围内的内置信息,例如:
messages.properties
messages_de.properties
messages_es.properties
etc.
默 认情况Grails会在messages.properties文件中检索信息,除非用户已经指定了一个自定义本地化文件。通过创建一个新的以 locale标签结尾的属性文件,你可以创建你感兴趣的属于自己的信息资源。比如属于英式英语范畴的 messages_en_GB.properties。
Accept-Language头部得知。然而
通过简单得给Grails传进lang参数作为请求参数,用户就可以更改地区了:
/book/list?lang=es
Grails 会自动更改用户地区,并把这个值存放在cookie里,随后的各种请求会有个新的头部。
你 通常最需要信息的地方是在视图内。要在视图内读取信息,使用message标签就可以了,如下:
<g:message code="my.localized.content" />
只要你在带有合适locale后缀的messages.properties文件有个key键,比如下面这种格式,Grails就会找到相对应的信息:
my.localized.content=Hola, Me llamo John. Hoy es domingo.
注 意有时候你需要向相应的信息传递参数。参考下面这个message标签:
<g:message code="my.localized.content" args="${ ['Juan', 'lunes'] }" />
还有可能在信息中使用定位参数:
my.localized.content=Hola, Me llamo {0}. Hoy es {1}.
因 为你可以在controllers中像方法一样使用标签,所以在controllers中读取信息也很经常,如下:
def show = {
def msg = message(code:"my.localized.content", args:['Juan', 'lunes'])
}
tag
libraries中使用的方法一样,但是注意如果你的标签库使用了不同的namespace,你需要使用g.前缀:
def myTag = { attrs, body ->
def msg = g.message(code:"my.localized.content", args:['Juan', 'lunes'])
}
首先用下面的这个命令安装i18n模板:
grails install-plugin i18n-templates
参考reference on the wiki,它里面了解释怎么使用i18n模板。